Although computers were once isolated and had minimal or little interaction with other computers, today's computers interact with a wide variety of other computers through Local Area Networks (LANs), Wide Area Networks (WANs), dial-up connections, and so forth. With the wide-spread growth of the Internet, connectivity between computers is becoming more important and has opened up many new applications and technologies. The growth of large-scale networks, and the wide-spread availability of low-cost personal computers, has fundamentally changed the way that many people work, interact, communicate, and play.
A relatively new and evolving communication protocol for sending messages between computing devices via the Internet is known as Simple Object Access Protocol, or SOAP. SOAP and other similar messaging protocols are based on the eXtensible Markup Language (XML), which is a language for structuring, storing, and sending data. Such messaging protocols provide a way to communicate between applications running on different operating systems, with different technologies and programming languages. Accordingly, these protocols are platform and language agnostic, yet simple and extensible.
In order to take advantage of these platform and language neutral protocols, interfaces are typically used for allowing programs and scripts running on the computing devices to dynamically access, process, and/or update the content, structure, and/or style of a message (e.g., a SOAP message). Such interfaces shield an application from the complexities associated with converting the document into content or inputs that can be understood by a particular application. For example, a Document Object Model (DOM) type interface can be used to parse the inputs of a message (e.g., an XML document) and expose them as a series of nodes in a hierarchical data or tree like structure. This data structure can then be stored in memory and repeatedly navigated for accessing and processing any part of the message by various applications.
Although such parsers allow for rich functionality and perform well for documents or messages that need to be randomly accessed and manipulated repeatedly, such navigation systems perform poorly in other situations. For example, each time a message is received, the interface requires that the entire content or inputs of the message be parsed and stored in memory. Accordingly, the runtime setup for these sophisticated input data structures requires large memory allocations. For an application which involves a one-time selective read/write per parse (i.e., an application that minimally accesses only a portion of the DOM and then discards it), these data structures present considerable overhead on memory and valuable processing resources. Such overhead can further be compounded for huge documents that require numerous node allocations for different node types, thereby requiring access to several different class libraries and requiring numerous memory addresses.